Héberger Docusaurus avec le domaine ZN2D.com
Le fait : J’ai Docusaurus qui roule dans un conteneur Docker. J’aimerais faire la même chose avec Apache pis héberger mon propre site.
Le problème : Comment faire pour que les deux conteneurs se parlent entre eux pis comment mettre à jour tout ça localement pis à distance (via un repo Git, peut-être?)
Hypothèse : Y doit ben y avoir une manière de les faire communiquer.
Après avoir cherché un boutte à trouver une façon d’exposer ou, encore mieux, de faire communiquer les conteneurs Docker entre eux — pis j’ai pas trouvé de manière facile de faire ça —, j’ai décidé de changer mon approche.
Vu que j’pourrais héberger différents sites web, l’approche Docker me semblait un peu compliquée... à peu près. Faque à la place, j’ai installé Apache directement pis maintenant, j’héberge la version compilée là-dessus.
Configuration d'un SSD NVMe sur un Raspberry Pi 5
-
J'ai décidé d'installer Apache sur mon Raspberry Pi 5 car il dispose d'une connexion PCIe. Cela offre plusieurs possibilités pour ajouter des fonctionnalités supplémentaires (Si vous regardez ce que Jeff Geerling a testé : Site Web de JG). Pour ce projet, j'ai commandé un HAT NVMe pour utiliser un SSD au lieu d'une carte SD.
-
Il y a plusieurs façons de procéder : créer une image sur une carte SD puis copier cette configuration sur le SSD, ou directement imager le SSD (ce que j'ai fait).
- En utilisant Pi Imager, j'ai choisi la version 64 bits sans interface graphique basée sur Bookworm.
- Une fois installé physiquement sur le Pi, j'ai démarré à partir d'une carte SD contenant un OS et j'ai modifié l'ordre de démarrage (
BOOT_ORDER
) :
# Modifier la configuration EEPROM sur le Pi
sudo rpi-eeprom-config --edit
# Modifier la ligne BOOT_ORDER comme suit :
BOOT_ORDER=0xf416 # Le 6 à la fin indique de démarrer d'abord à partir du NVMe
Installation d'Apache
- En suivant les instructions de base pour installer Apache, voici ce que j'ai fait :
sudo apt install apache2 -y
- Et voilà, un site Web de base est créé. Maintenant, je dois créer les fichiers appropriés pour héberger le domaine du site Web :
zn2d.com
<VirtualHost *:80>
ServerName zn2d.com
ServerAlias www.zn2d.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/website/build
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> - Le dossier
DocumentRoot
doit être créé et la propriété transférée àwww-data
:sudo mkdir -p /var/www/website/build
sudo chown -R www-data:www-data /var/www/website/build
sudo chmod -R 770 /var/www/website/build
Mais maintenant... comment m'assurer qu'il reste à jour puisque je vais travailler dessus à partir de différents endroits et ordinateurs ?
- J'ai finalement décidé d'utiliser cette approche : je travaillerai sur mes fichiers Docusaurus en local, puis je pousserai et tirerai tout depuis mon repo GitHub. Ainsi, je saurai que tout ce qui est dans le repo est la dernière version.
- Problèmes potentiels : Je ne veux pas me connecter au Pi et tirer manuellement la dernière version. De plus, je devrai reconstruire le projet Docusaurus à chaque fois pour obtenir les fichiers HTML statiques.
Fonctionnalité Docusaurus & Apache, Git et script pour héberger le script
- Pour héberger votre projet, vous devez d'abord le construire localement :
npm run build
- Cette commande doit être exécutée dans le dossier de votre projet :
Ex: \my-website\docusaurus-project\
- Cela générera un dossier
\build\
contenant les fichiers HTML nécessaires. Cependant, cela ne fonctionnera pas avec Apache, car ils doivent être placés ici (sauf modification) :/var/www/html/website/build
. J'ai donc décidé de copier les fichiers vers le bon dossier.
- Cela générera un dossier
- Comme mentionné précédemment, je dois tirer la dernière version du site Web depuis Git directement vers le dossier approprié :
Ex: \my-website\docusaurus-project\
- Sachant cela, voici un script que j'ai écrit pour automatiser tout le processus (y compris un journal) :
#!/bin/bash
# Variables
GIT_REPO="[email protected]:USERNAME/yourrepo.git" # Modifier ceci
PROJECT_DIR="/my-website/docusaurus-project" # Modifier ceci
BRANCH="main" # Changer si nécessaire
BUILD_DIR="$PROJECT_DIR/build"
DEPLOY_DIR="/var/www/html/website/build"
LOG_FILE="/var/log/deploy.log"
# Vérifier si l'utilisateur est root
if [[ $EUID -ne 0 ]]; then
echo "Ce script doit être exécuté en tant que root !" | tee -a "$LOG_FILE"
exit 1
fi
# Démarrage de la journalisation
echo "=== Déploiement commencé : $(date) ===" | tee -a "$LOG_FILE"
# Cloner si le repo n'existe pas
if [ ! -d "$PROJECT_DIR" ]; then
echo "Le dépôt n'a pas été trouvé. Clonage..." | tee -a "$LOG_FILE"
git clone -b "$BRANCH" "$GIT_REPO" "$PROJECT_DIR" || { echo "Échec du clonage Git"; exit 1; }
fi
cd "$PROJECT_DIR" || { echo "Échec de l'accès au dossier du projet"; exit 1; }
echo "Récupération des dernières modifications..." | tee -a "$LOG_FILE"
git reset --hard
git clean -fd
git pull origin "$BRANCH" --force || { echo "Échec du pull Git"; exit 1; }
# Installer les dépendances et construire le projet
npm run build || { echo "Échec de la construction"; exit 1; }
# Vérification du dossier de build
if [ ! -d "$BUILD_DIR" ]; then
echo "Dossier de build introuvable !" | tee -a "$LOG_FILE"
exit 1
fi
# Déploiement vers Apache
echo "Déploiement en cours..." | tee -a "$LOG_FILE"
rsync -av --delete "$BUILD_DIR/" "$DEPLOY_DIR/" || { echo "Échec du déploiement"; exit 1; }
# Permissions
chown -R www-data:www-data "$DEPLOY_DIR"
chmod -R 755 "$DEPLOY_DIR"
# Redémarrage d'Apache
echo "Redémarrage d'Apache..." | tee -a "$LOG_FILE"
systemctl reload apache2 || { echo "Échec du redémarrage d'Apache"; exit 1; }
echo "=== Déploiement terminé avec succès : $(date) ===" | tee -a "$LOG_FILE"
Créer un Cron Job pour Automatiser
- Pour s'assurer que la dernière version du site est affichée, j'ai créé un cron job pour exécuter le script deux fois par jour :
sudo crontab -e
- Ajouter cette ligne :
0 6,18 * * * /usr/local/bin/deployweb3.sh >> /var/log/deploy.log 2>&1